package com.calvin.study.event.base;

import org.springframework.context.ApplicationEvent;

import cn.hutool.core.util.StrUtil;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class BaseEvent<T> extends ApplicationEvent {

	private static final long serialVersionUID = 5268765023566328218L;

	// 事件内容（具备实际业务意义的内容，如：参数）
	private T eventContent;

	// 事件执行者（执行的什么事件，如：userSyncEvent（用户同步事件）等）
	private String eventExecutor;

	public BaseEvent(Object source) {
		super(source);
	}

	public BaseEvent(Object source, T eventContent) {
		super(source);
		this.eventContent = eventContent;
		String clazzSimpleName  = eventContent.getClass().getSimpleName();
		//事件执行者名称（类名首字母小写+Executor）
		this.eventExecutor = StrUtil.isNotEmpty(clazzSimpleName) ? new StringBuffer(clazzSimpleName.substring(0, 1).toLowerCase()).append(clazzSimpleName.substring(1)).append("Executor").toString() : null;
	}

}
